// 跨快捷访问 获取token
import store from '@/store'
import router from '@/router'
// 进度条插件
import NProgress from 'nprogress'
// 使用进度条样式
import 'nprogress/nprogress.css'
// 声明一个白名单
const whiteList = ['/login', '/404']

router.beforeEach(async(to, from, next) => {
// 进来的时候 加载
  NProgress.start() // 开启进度条
  // 判断是否有token
  // 已经登陆过 再去登录没有意义
  if (store.getters.token) {
    // 有token 判断进不进登录页
    if (to.path === '/login') {
      // 如果是去登录页而且有token  => 跳转到主页
      next('/')
      NProgress.done()
    } else {
      // 判断是否获取过资料 如果有UserId 表示i已经获取guo 没有id表示没有获取过
      if (!store.getters.userId) {
        // 获取id 调用action 获取资料
        // 因为是pomise  异步操作 需要强制等待 信息获取之后
        const { roles } = await store.dispatch('user/getUserInfo') // (权限)这个方法有我想要的menus
        console.log(roles.menus)
        // 权限标识
        // 调用vuex的 action方法 => 传入值
        const routes = await store.dispatch('permission/filterRoutes', roles.menus)
        // console.log();
        // routes 就是我们要添加的动态路由
        router.addRoutes(routes) // 添加到路由表
        // addRoutes 添加之后需要 多加一次跳转才可以生效 不能直接next
        // to要到哪里去
        next(to.path)
      } else {
        // ======= 权限
      // 不是登录页 可以跳
        next()
      }
    }
    // 没有token 的情况
  } else {
    // 没有token 直接让她去登录页
    if (whiteList.indexOf(to.path) > -1) {
      // 在白名单里可以跳转
      next()
    } else {
      // 不在白名单 直接跳出登录页
      next('/login')
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done() // 关闭进度条
})
